//package com.tfswx.serialport;
//
//import com.alibaba.fastjson.JSONObject;
//import com.corundumstudio.socketio.Configuration;
//import com.corundumstudio.socketio.SocketIOClient;
//import com.corundumstudio.socketio.SocketIOServer;
//import lombok.extern.slf4j.Slf4j;
//
//import java.lang.reflect.InvocationTargetException;
//import java.lang.reflect.Method;
//import java.net.InetSocketAddress;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Set;
//
///**
// * @author Ricky
// * @date 2020-9-4
// */
//@Slf4j
//public class SocketIoServeice {
//
//    private static final Config CONFIG = Config.getInstance();
//
//    private static final Map<String, SocketIOClient> SOCKET_LIST = new HashMap<>();
//
//    private static synchronized void addClient(SocketIOClient client) {
//        SOCKET_LIST.put(client.getSessionId().toString(), client);
//        InetSocketAddress address = client.getHandshakeData().getAddress();
//        System.out.println("有客户端" + address.getHostString() + "进入，当前连接数：" + SOCKET_LIST.size());
//    }
//
//    private static synchronized void removeClient(SocketIOClient client) {
//        SOCKET_LIST.remove(client.getSessionId().toString());
//        InetSocketAddress address = client.getHandshakeData().getAddress();
//        System.out.println("有客户端" + address.getHostString() + "断开，当前连接数：" + SOCKET_LIST.size());
//    }
//
//    public static void sendMessage(Object progress) {
//        Set<Map.Entry<String, SocketIOClient>> entries = SOCKET_LIST.entrySet();
//        for (Map.Entry<String, SocketIOClient> entry : entries) {
//            SocketIOClient client = entry.getValue();
//            if (client != null) {
//                client.sendEvent("message", progress);
//            }
//        }
//
//    }
//
//    public static void start() {
//        SocketIOServer server = getServer();
//        server.addConnectListener(SocketIoServeice::addClient);
//
//        server.addEventListener("send", String.class, (client, data, ackSender) -> {
//            if (!ackSender.isAckRequested()) {
//                SerialportService.send(data);
//            } else {
//                ackSender.sendAckData("ok");
//            }
//        });
//
//        server.addEventListener("print", String.class, (client, data, ackSender) -> {
//            if (!ackSender.isAckRequested()) {
//                throw new RuntimeException("测试");
//            } else {
//                try {
//                    PrintService.print(data);
//                    ackSender.sendAckData(null, null);
//                } catch (Exception e) {
//                    ackSender.sendAckData(e);
//                }
//            }
//        });
//
//        server.addDisconnectListener(SocketIoServeice::removeClient);
//        server.start();
//        log.info("socketio已启动：{}", CONFIG.getPort());
//        SerialportService.init();
//    }
//
//    private static SocketIOServer getServer() {
//        Configuration config = new Configuration();
//        config.setPort(CONFIG.getPort());
//        config.setRandomSession(true);
//        return new SocketIOServer(config);
//    }
//}
